Skip to main content

Controllo di posizione sul controllore con SM_Drive_PosControl

Vedi il PosControl.project progetto di esempio nella directory di installazione di CODESYS sotto ..\CODESYS SoftMotion\Examples.

Nella maggior parte dei casi, un servocontrollo assume il controllo della posizione dell'azionamento, nonché il controllo della potenza e il controllo della velocità di rotazione. Tuttavia, esistono casi d'uso in cui il controllore assume il controllo della posizione dell'asse. Questo esempio mostra come un dispositivo controllato in velocità (ad esempio un convertitore di frequenza con feedback di posizione) è controllato in posizione da CODESYS SoftMotion.

Il requisito è un dispositivo che è controllato dalla velocità impostata e restituisce la sua posizione attuale. In questo esempio, viene utilizzato un terminale di uscita analogica a 10 V EL4031 con un segnale utilizzato come setpoint di velocità per un convertitore di frequenza. Un terminale dell'encoder EL5101 viene utilizzato per il feedback di posizione.

Controllare la posizione dell'asse con SM_Drive_PosControl

  1. Aggiungere un asse controllato in posizione di tipo SM_Drive_PosControl sotto Pool di assi generali SoftMotion nell'albero dei dispositivi.

  2. Aggiungere i terminali per il terminale analogico (EL4031) e l'encoder (EL5101) all'albero dei dispositivi.

    Albero dei dispositivi:

    _sm_img_example_poscontrol_1.png

    Suggerimento

    Le descrizioni dei dispositivi del bus di campo devono essere scaricate e installate dal produttore.

  3. Apri il SM_Drive_PosControl dispositivo nell'editor e specificare il parametro generale Modulo con valore 360.0 sul Generale scheda.

  4. Clicca il Ridimensionamento/Mappatura scheda. Il numero di incrementi per giro motore è ricavato dalla scheda tecnica dell'encoder. In questo esempio, 4096 gli incrementi (1) sono di un giro del motore. Poiché stai lavorando con gradi angolari nell'applicazione, specifichi il valore 360 (2) per unità in applicazione.

    Impostazioni:

    _sm_img_example_poscontrol_2.png
  5. Passa a Azionamento SoftMotion: anello di controllo della posizione scheda e specificare i seguenti parametri:

    • D 2.0

      Il tempo morto determina il numero di cicli in cui la posizione effettiva ricevuta (encoder) viene sfasata alla posizione impostata dell'asse. Il tempo morto dipende dai componenti applicati e deve essere determinato per tentativi ed errori.

    • Kp 0.0

      La costante di proporzionalità è il fattore per il quale viene moltiplicato l'errore di posizione (lo scostamento tra posizione impostata e posizione effettiva) da sommare successivamente alla velocità impostata. Ora imposta questo valore su 0. Il valore verrà determinato sperimentalmente in un secondo momento.

    • Bit width: 16

      La larghezza di bit del valore effettivo viene ricevuta a seconda dei componenti utilizzati e può essere impostata come valori a 16, 24 o 32 bit. Imposta il valore su 16 perché i componenti utilizzati danno la posizione come UINT.

    • _cds_icon_option_deactivated.pngmax

      Lasciare spento l'interruttore di monitoraggio dell'errore di posizione. Se necessario, puoi riaccenderlo. Selezionare la casella di controllo e specificare un ritardo massimo consentito. Se questo valore viene superato durante il funzionamento, l'asse entra in uno stato di errore.

    • δ/δt

      Il parametro ha il valore 1 e va modificato solo in casi molto particolari. Definisce il rapporto tra la velocità impostata e la derivazione della posizione. L'intervallo di valori va da 0 a 1:

      0: Il valore di fSetVelocity viene utilizzato come fonte.

      1: Come sorgente viene utilizzata la derivazione numerica della posizione impostata.

    Ciclo di controllo:

    _sm_img_example_poscontrol_3.png
  6. Ora si impostano i valori di velocità che vengono inviati all'attuatore. A tal fine è necessario conoscere la velocità massima in unità applicative e il corrispondente valore grezzo dei dati trasferiti. In questo esempio, la velocità massima è raggiunta dall'uscita del valore 16#7FFF, che corrisponde a una velocità di 10 giri al secondo. Questo corrisponde anche a 3600 gradi al secondo secondo le impostazioni.

    Impostazioni:

    _sm_img_example_poscontrol_5.png

Mappatura delle variabili su input e output

Mappare le variabili con i dati dell'asse sui moduli I/O. I dati ciclici disponibili dell'asse si trovano nelle strutture dati in e out. È possibile stabilire questa connessione nell'editor del dispositivo del dispositivo di input e output in modo programmatico o direttamente.

  1. Collegare l'uscita (velocità impostata) al dispositivo EL4031. Apri il dispositivo nell'editor e fai clic su Mappatura I/O EtherCAT scheda. Assegna la variabile out.iSetVelocity dell'asse all'uscita. Nel caso di un'uscita a 32 bit, out.diSetVelocity viene utilizzato.

    Mappatura:

    _sm_img_example_poscontrol_7.png
  2. Procedere allo stesso modo con l'inserimento della posizione. Aprire il dispositivo EL5101 nell'editor e impostare il valore di input della posizione su in.wActPosition. Per un ingresso a 32 bit, impostare il valore su in.dwActPosition. Mappatura:

    _sm_img_example_poscontrol_8.png
  3. Affinché l'abilitazione del controllo, l'arresto rapido e l'interruttore di fine corsa funzionino, gli ingressi corrispondenti di SMC_PosControlInput devono essere definiti dai valori dell'azionamento. Le uscite di SMC_PosControlOutput devono essere trasmessi all'azionamento (vedi descrizione sotto). Se l'unità non supporta l'arresto rapido, ad esempio, allora SM_Drive_PosControl.in.bDriveStartRealState := TRUE deve essere impostato e SM_Drive_PosControl.out.bDriveStart può essere ignorato. In questo esempio, bDriveStartRealState e bRegulatorRealState devono essere impostati nell'applicazione.

SM_Drive_PosControl.in.bDriveStartRealState := TRUE;
SM_Drive_PosControl.in.bRegulatorRealState := TRUE;

Determinazione dei tempi morti del sistema

Ora imposta la modalità online con l'asse e imposta i parametri di controllo.

Importante

Notare che l'asse potrebbe spostarsi fuori controllo. Pertanto è necessario prendere le dovute precauzioni di sicurezza.

Quindi provare a far funzionare l'asse senza controllo di posizione.fKp è già impostato su 0.0 e le impostazioni di ridimensionamento sono verificate. Cambia l'asse su MC_Power e inizia MC_MoveVelocity. L'asse si muove ora con la velocità programmata di 1 U/s. In caso di deviazioni, è necessario correggere la scala di conseguenza.

  1. Termina il movimento, ad esempio con MC_MoveRelativee avviare la funzione di traccia.

  2. Determina il tempo morto del sistema misurando la differenza di tempo tra la posizione impostata e la posizione effettiva.

    In MC_MoveRelative, impostare la velocità massima e una grande accelerazione. Avviare la traccia di campionamento con MC_MoveRelative. Determinare ora la differenza di tempo tra il movimento iniziale della posizione impostata e la prima reazione della posizione effettiva.

    Traccia:

    _sm_img_example_poscontrol_6.png
  3. Per determinare il tempo morto D, dividi questa differenza di tempo per il tempo di ciclo (D = differenza di tempo/tempo di ciclo). SoftMotion Drive: controllo della posizione scheda, specificare questo valore nel ciclo di controllo in D.

  4. Ora cercate di determinare l'impostazione corretta per fKp. A tale scopo, modificate il valore della variabile <drive>.controller.fKp in un elenco di controllo.

    Set fKp a un numero piccolo (ad esempio 0,0001) e aumenta il valore passo dopo passo. Controlla il comportamento di ogni modifica con la traccia di campionamento. Non appena si rilevano delle fluttuazioni, il limite massimo è stato raggiunto. Ora riduci il valore di fKp di circa il 10% e specificarlo sul SoftMotion Drive: controllo della posizione scheda nel circuito di controllo in Kp .

    Ora puoi usare l'asse.

Modulo funzionale SMC_PosControlInput

Biblioteca: SM3_Drive_PosControl

Tabella 2. Ingressi (VAR_INPUT)

Nome

Tipo di dati

Valore iniziale

Descrizione

bLimitPos

BOOL

Finecorsa in direzione positiva (solo per assi finiti)

Dal SoftMotion versione 4.12.0.0, il monitoraggio dei finecorsa è abilitato per impostazione predefinita. Per le versioni precedenti, questo deve essere abilitato manualmente impostando bHWLimitEnable a TRUE. Questa operazione viene in genere eseguita scrivendo il numero del parametro corrispondente 1206 per mezzo di MC_WriteBoolParameter.

TRUE: Finecorsa non azionato

FALSE: Finecorsa azionato

bLimitNeg

BOOL

Finecorsa in direzione negativa

TRUE: Finecorsa non azionato

FALSE: Finecorsa azionato

wActPosition

WORD

Posizione attuale (posizione effettiva) come valore a 16 bit

dwActPosition

DWORD

Posizione attuale (posizione effettiva) come valore a 32 bit

bExternalError

BOOL

Errore esterno

bRegulatorRealState

BOOL

TRUE: Asse da controllare

bDriveStartRealState

BOOL

FALSE: Asse in Quick Stop

dwEncoderCounterModulo

DWORD

0

bDelayActivation

BOOL

TRUE: Fino a quando bDelayActivation è TRUE, SM3_Drive_PosControl non passa allo stato di comunicazione 100.

Caso d'uso: il valore è mantenuto a TRUE fino a quando l'encoder applicato non fornisce valori di posizione validi.



Modulo funzionale SMC_PosControlOutput

Biblioteca: SM3_Drive_PosControl

Tabella 3. Uscite (VAR_OUTPUT)

Nome

Tipo di dati

Valore iniziale

Descrizione

bRegulatorOnIn

BOOL

TRUE: L'asse deve essere controllato.

bDriveStart

BOOL

FALSE: L'asse deve eseguire un arresto rapido.

diSetVelocity

DINT

Imposta velocità

iSetVelocity

INT

Imposta velocità



Blocco funzione SMC_SetPosControlParams

Biblioteca: SM3_Drive_PosControl

Modifica i parametri di an SM3_Drive_PosControl asse

Tabella 4. Ingressi (VAR_INPUT)

Nome

Tipo di dati

Valore iniziale

Descrizione

Axis

AXIS_REF_POSCONTROL

Riferimento dell'asse

bExecute

BOOL

TRUE: Attiva l'esecuzione del blocco funzione

fKp

LREAL

-1

Guadagno proporzionale per lag

Un valore inferiore a 0 viene ignorato.

fPartVelPilotControl

LREAL

-1

Fattore per il controllo della velocità con fSetPosition

0: Nessun controllo pilota di velocità; 1: Uscita diretta di fSetVelocity. Un valore inferiore a 0 viene ignorato.

fDeadTime

LREAL

-1

Ritardo di tempo nei cicli tra fSetPosition e fActPositioin

Questo valore non deve essere 0. Un valore inferiore a 0 viene ignorato.

fMaxPositionDiff

LREAL

-1

Ritardo di posizione massimo

0 disattiva il controllo del massimo ritardo di posizione. Un valore inferiore a 0 viene ignorato.



Tabella 5. Uscite (VAR_OUTPUT)

Nome

Tipo di dati

Valore iniziale

Descrizione

bDone

BOOL

L'esecuzione del blocco funzione è stata terminata.

bError

BOOL

TRUE: Si è verificato un errore nel blocco funzione.

ErrorID

SMC_ERROR

Identificazione dell'errore



Esempio 2. Esempio

I parametri dell'azionamento dell'asse SM_Drive_PosControl sono impostati.

PROGRAM PLC_PRG
VAR
        fbSetPosControlParams : SMC_SetPosControlParams;
END_VAR

fbSetPosControlParams.fKp := 1;
fbSetPosControlParams.fPartVelPilotControl :=0;
fbSetPosControlParams.fDeadTime :=0.1;
fbSetPosControlParams.fMaxPositionDiff :=1;

fbSetPosControlParams(Axis:= SM_Drive_PosControl, bExecute:= TRUE);